home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Source / WinTlb / OAIDL.IDL < prev    next >
Text File  |  1997-04-22  |  44KB  |  1,521 lines

  1. //+---------------------------------------------------------------------------
  2. //
  3. //  Microsoft Windows
  4. //  Copyright (C) Microsoft Corporation, 1992 - 1996.
  5. //
  6. //  File: oaidl.idl
  7. //
  8. //----------------------------------------------------------------------------
  9.  
  10. #ifndef DO_NO_IMPORTS
  11. import "objidl.idl";
  12. #endif
  13.  
  14. interface ITypeInfo;
  15. interface ITypeLib;
  16. interface IErrorInfo;
  17. interface ICreateErrorInfo;
  18. interface ISupportErrorInfo;
  19. interface IDispatch;
  20. interface IStream;
  21. interface IStorage;
  22. interface IUnknown;
  23.  
  24. [
  25.   version(0.1), pointer_default(unique),
  26.   local  /* marshalling supplied by oleaut32.dll */
  27. ]
  28. interface RemVariant
  29. {
  30.  
  31. cpp_quote("//+-------------------------------------------------------------------------")
  32. cpp_quote("//")
  33. cpp_quote("//  Microsoft Windows")
  34. cpp_quote("//  Copyright (C) Microsoft Corporation, 1992 - 1996.")
  35. cpp_quote("//")
  36. cpp_quote("//--------------------------------------------------------------------------")
  37.  
  38. #ifndef HUGEP
  39. # ifdef WIN16
  40. #  define HUGEP _huge
  41. # else
  42. #  define HUGEP
  43. #  define FAR
  44. #  define FARSTRUCT
  45. # endif
  46. #endif
  47.  
  48.  
  49.  
  50.  
  51. // #########################################################################
  52. //
  53. //  SAFEARRAY
  54. //
  55. // #########################################################################
  56.  
  57. cpp_quote("#ifndef _tagSAFEARRAYBOUND_DEFINED")
  58. cpp_quote("#define _tagSAFEARRAYBOUND_DEFINED")
  59. cpp_quote("#define _SAFEARRAYBOUND_DEFINED")
  60. cpp_quote("#define _LPSAFEARRAYBOUND_DEFINED")
  61. typedef struct  SAFEARRAYBOUND {
  62.     ULONG cElements;
  63.     LONG lLbound;
  64. } SAFEARRAYBOUND, * LPSAFEARRAYBOUND;
  65. cpp_quote("#endif")
  66.  
  67.  
  68. cpp_quote("#ifndef _tagSAFEARRAY_DEFINED")
  69. cpp_quote("#define _tagSAFEARRAY_DEFINED")
  70. cpp_quote("#define _SAFEARRAY_DEFINED")
  71. cpp_quote("#define _LPSAFEARRAY_DEFINED")
  72. cpp_quote("#if 0")
  73. cpp_quote("/* the following is what RPC knows how to remote */")
  74. typedef struct FARSTRUCT SAFEARRAY {
  75.     unsigned short cDims;
  76.     unsigned short fFeatures;
  77. #if defined(_WIN32)
  78.     unsigned long cbElements;
  79.     unsigned long cLocks;
  80. #else
  81.     unsigned short cbElements;
  82.     unsigned short cLocks;
  83. #ifdef _MAC
  84.     Handle handle;
  85. #else
  86.     unsigned long handle;               // unused but kept for compatiblity
  87. #endif
  88. #endif
  89. #ifdef LATER
  90.     void HUGEP* pvData;
  91. #else
  92.     BYTE *pvData;
  93. #endif
  94.     [size_is(cDims)] SAFEARRAYBOUND rgsabound[];
  95. } SAFEARRAY;
  96. cpp_quote("#else /* 0 */")
  97. cpp_quote("typedef struct FARSTRUCT  SAFEARRAY {")
  98. cpp_quote("    unsigned short cDims;")
  99. cpp_quote("    unsigned short fFeatures;")
  100. cpp_quote("#if defined(_WIN32)")
  101. cpp_quote("    unsigned long cbElements;")
  102. cpp_quote("    unsigned long cLocks;")
  103. cpp_quote("#else")
  104. cpp_quote("    unsigned short cbElements;")
  105. cpp_quote("    unsigned short cLocks;")
  106. cpp_quote("    unsigned long handle;               // unused but kept for compatiblity")
  107. cpp_quote("#endif")
  108. cpp_quote("    void HUGEP* pvData;")
  109. cpp_quote("    SAFEARRAYBOUND rgsabound[1];")
  110. cpp_quote("} SAFEARRAY;")
  111. cpp_quote("#endif /* 0 */")
  112.  
  113. cpp_quote("#endif /* _tagSAFEARRAY_DEFINED */")
  114.  
  115. const USHORT FADF_AUTO       = 0x0001;  /* the array is allocated on the stack */
  116. const USHORT FADF_STATIC     = 0x0002;  /* the array is staticly allocated */
  117. const USHORT FADF_EMBEDDED   = 0x0004;  /* array is embedded in a structure        */
  118. const USHORT FADF_FIXEDSIZE  = 0x0010;  /* array may not be resized or reallocated */
  119. const USHORT FADF_BSTR       = 0x0100;  /* an array of BSTRs */
  120. const USHORT FADF_UNKNOWN    = 0x0200;  /* an array of IUnknown* */
  121. const USHORT FADF_DISPATCH   = 0x0400;  /* and array of IDispatch* */
  122. const USHORT FADF_VARIANT    = 0x0800;  /* an array of VARIANTs */
  123. const USHORT FADF_RESERVED   = 0xF0E8;  /* reserved bits */
  124.  
  125. // Forward references.
  126. typedef [unique] struct userVARIANT   * wireVARIANT;
  127. typedef [wire_marshal( wireVARIANT )]  struct  VARIANT  VARIANT;
  128.  
  129.  
  130. typedef struct SAFEARR_BSTR
  131. {
  132.                             unsigned long   Size;
  133.     [size_is(Size), ref]    wireBSTR *      aBstr;
  134. } SAFEARR_BSTR;
  135.  
  136. typedef struct SAFEARR_UNKNOWN
  137. {
  138.                             unsigned long   Size;
  139.     [size_is(Size), ref]    IUnknown **      apUnknown;
  140. } SAFEARR_UNKNOWN;
  141.  
  142. typedef struct SAFEARR_DISPATCH
  143. {
  144.                             unsigned long   Size;
  145.     [size_is(Size), ref]    IDispatch **     apDispatch;
  146. } SAFEARR_DISPATCH;
  147.  
  148.  
  149. typedef struct SAFEARR_VARIANT
  150. {
  151.                             unsigned long   Size;
  152.     [size_is(Size), ref]    wireVARIANT *   aVariant;  
  153. } SAFEARR_VARIANT;
  154.  
  155. typedef [v1_enum] enum SF_TYPE {
  156.     SF_ERROR    = VT_ERROR,
  157.     SF_I1       = VT_I1,
  158.     SF_I2       = VT_I2,
  159.     SF_I4       = VT_I4,
  160.     SF_I8       = VT_I8,
  161.     SF_BSTR     = VT_BSTR,
  162.     SF_UNKNOWN  = VT_UNKNOWN,
  163.     SF_DISPATCH = VT_DISPATCH,
  164.     SF_VARIANT  = VT_VARIANT
  165. } SF_TYPE;
  166.  
  167. typedef union SAFEARRAYUNION switch(unsigned long vtDisc) u
  168. {
  169.     case SF_BSTR:      SAFEARR_BSTR     BstrStr;
  170.     case SF_UNKNOWN:   SAFEARR_UNKNOWN  UnknownStr;
  171.     case SF_DISPATCH:  SAFEARR_DISPATCH DispatchStr;
  172.     case SF_VARIANT:   SAFEARR_VARIANT  VariantStr;
  173.     case SF_I1:        BYTE_SIZEDARR    ByteStr;
  174.     case SF_I2:        WORD_SIZEDARR    WordStr;
  175.     case SF_I4:        DWORD_SIZEDARR   LongStr;
  176.     case SF_I8:        HYPER_SIZEDARR   HyperStr;
  177.     default:           ;                // error
  178. } SAFEARRAYUNION;
  179.  
  180.  
  181. typedef struct userSAFEARRAY {
  182.     unsigned short  cDims;
  183.     unsigned short  fFeatures;
  184.     unsigned long   cbElements;
  185.     unsigned long   cLocks;
  186.     SAFEARRAYUNION  uArrayStructs;
  187.     [size_is(cDims)]                    SAFEARRAYBOUND rgsabound[];
  188. } userSAFEARRAY;
  189.  
  190. typedef [unique]  userSAFEARRAY *  userPSAFEARRAY;
  191. typedef [unique]  userPSAFEARRAY * wirePSAFEARRAY;
  192.  
  193. typedef [wire_marshal( wirePSAFEARRAY )] SAFEARRAY FAR* LPSAFEARRAY;
  194.  
  195. // typedef CY CURRENCY;
  196.  
  197.  
  198.  
  199. // #########################################################################
  200. //         VARIANT
  201. // #########################################################################
  202.  
  203. cpp_quote("/* VARIANT STRUCTURE")
  204. cpp_quote(" *")
  205. cpp_quote(" *  VARTYPE vt;")
  206. cpp_quote(" *  unsigned short wReserved1;")
  207. cpp_quote(" *  unsigned short wReserved2;")
  208. cpp_quote(" *  unsigned short wReserved3;")
  209. cpp_quote(" *  union {")
  210. cpp_quote(" *    unsigned char        VT_UI1               ")
  211. cpp_quote(" *    short                VT_I2                ")
  212. cpp_quote(" *    long                 VT_I4                ")
  213. cpp_quote(" *    float                VT_R4                ")
  214. cpp_quote(" *    double               VT_R8                ")
  215. cpp_quote(" *    VARIANT_BOOL         VT_BOOL              ")
  216. cpp_quote(" *    SCODE                VT_ERROR             ")
  217. cpp_quote(" *    CY                   VT_CY                ")
  218. cpp_quote(" *    DATE                 VT_DATE              ")
  219. cpp_quote(" *    BSTR                 VT_BSTR              ")
  220. cpp_quote(" *    IUnknown FAR*        VT_UNKNOWN           ")
  221. cpp_quote(" *    IDispatch FAR*       VT_DISPATCH          ")
  222. cpp_quote(" *    SAFEARRAY FAR*       VT_ARRAY|*           ")
  223.  
  224. cpp_quote(" *    short FAR*           VT_BYREF|VT_I2       ")
  225. cpp_quote(" *    long FAR*            VT_BYREF|VT_I4       ")
  226. cpp_quote(" *    float FAR*           VT_BYREF|VT_R4       ")
  227. cpp_quote(" *    double FAR*          VT_BYREF|VT_R8       ")
  228. cpp_quote(" *    VARIANT_BOOL FAR*    VT_BYREF|VT_BOOL     ")
  229. cpp_quote(" *    SCODE FAR*           VT_BYREF|VT_ERROR    ")
  230. cpp_quote(" *    CY FAR*              VT_BYREF|VT_CY       ")
  231. cpp_quote(" *    DATE FAR*            VT_BYREF|VT_DATE     ")
  232. cpp_quote(" *    BSTR FAR*            VT_BYREF|VT_BSTR     ")
  233. cpp_quote(" *    IUnknown FAR* FAR*   VT_BYREF|VT_UNKNOWN  ")
  234. cpp_quote(" *    IDispatch FAR* FAR*  VT_BYREF|VT_DISPATCH ")
  235. cpp_quote(" *    SAFEARRAY FAR* FAR*  VT_BYREF|VT_ARRAY|*  ")
  236. cpp_quote(" *    VARIANT FAR*         VT_BYREF|VT_VARIANT  ")
  237.  
  238. cpp_quote(" *    void FAR*            Generic ByRef        ")
  239. cpp_quote(" */")
  240.  
  241. cpp_quote("#ifndef _tagVARIANT_DEFINED")
  242. cpp_quote("#define _tagVARIANT_DEFINED")
  243. cpp_quote("#if 0")
  244. cpp_quote("/* the following is what RPC knows how to remote */")
  245.  
  246. struct VARIANT{
  247.     VARTYPE vt;
  248.     WORD wReserved1;
  249.     WORD wReserved2;
  250.     WORD wReserved3;
  251.     [switch_type(unsigned short), switch_is((unsigned short) (vt & 0x1fff))] union
  252.     {
  253. [case(VT_I4)]   // moved first so you can statically init most of the structure
  254.       long          lVal;           /* VT_I4                */
  255. [case(VT_UI1)]
  256.       unsigned char bVal;           /* VT_UI1               */
  257. [case(VT_I2)]
  258.       short         iVal;           /* VT_I2                */
  259. [case(VT_R4)]
  260.       float         fltVal;         /* VT_R4                */
  261. [case(VT_R8)]
  262.       double        dblVal;         /* VT_R8                */
  263. [case(VT_BOOL)]
  264.       VARIANT_BOOL  bool;           /* VT_BOOL              */
  265. [case(VT_ERROR)]
  266.       SCODE         scode;          /* VT_ERROR             */
  267. [case(VT_CY)]
  268.       CY            cyVal;          /* VT_CY                */
  269. [case(VT_DATE)]
  270.       DATE          date;           /* VT_DATE              */
  271. [case(VT_BSTR)]
  272.       BSTR          bstrVal;        /* VT_BSTR              */
  273.  
  274. #if !defined(NO_MARSHAL_INTERFACE)
  275. [case(VT_UNKNOWN)]
  276.       IUnknown      *punkVal;       /* VT_UNKNOWN           */
  277. #endif //!defined(NO_MARSHAL_INTERFACE)
  278.  
  279. #ifdef HPP
  280. [case(VT_DISPATCH)]
  281.       IDispatch     *pdispVal;      /* VT_DISPATCH          */
  282. #endif
  283.  
  284. [case(VT_ARRAY)]
  285.       SAFEARRAY     *parray;        /* VT_ARRAY|*           */
  286.  
  287. [case(VT_UI1|VT_BYREF)]
  288.       unsigned char *pbVal;         /* VT_BYREF|VT_UI1      */
  289. [case(VT_I2|VT_BYREF)]
  290.       short         *piVal;         /* VT_BYREF|VT_I2       */
  291. [case(VT_I4|VT_BYREF)]
  292.       long          *plVal;         /* VT_BYREF|VT_I4       */
  293. [case(VT_R4|VT_BYREF)]
  294.       float         *pfltVal;       /* VT_BYREF|VT_R4       */
  295. [case(VT_R8|VT_BYREF)]
  296.       double        *pdblVal;       /* VT_BYREF|VT_R8       */
  297. [case(VT_BOOL|VT_BYREF)]
  298.       VARIANT_BOOL  *pbool;         /* VT_BYREF|VT_BOOL     */
  299. [case(VT_ERROR|VT_BYREF)]
  300.       SCODE         *pscode;        /* VT_BYREF|VT_ERROR    */
  301. [case(VT_CY|VT_BYREF)]
  302.       CY            *pcyVal;        /* VT_BYREF|VT_CY       */
  303. [case(VT_DATE|VT_BYREF)]
  304.       DATE          *pdate;         /* VT_BYREF|VT_DATE     */
  305. [case(VT_BSTR|VT_BYREF)]
  306.       BSTR          *pbstrVal;      /* VT_BYREF|VT_BSTR     */
  307.  
  308. #if !defined(NO_MARSHAL_INTERFACE)
  309. [case(VT_UNKNOWN|VT_BYREF)]
  310.       IUnknown      **ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */
  311. #endif //!defined(NO_MARSHAL_INTERFACE)
  312.  
  313. #ifdef HPP
  314. [case(VT_DISPATCH|VT_BYREF)]
  315.       IDispatch     **ppdispVal;    /* VT_BYREF|VT_DISPATCH */
  316. #endif
  317.  
  318. [case(VT_ARRAY|VT_BYREF)]
  319.       SAFEARRAY     **pparray;      /* VT_BYREF|VT_ARRAY|*  */
  320. [case(VT_VARIANT, VT_VARIANT|VT_BYREF)]
  321.       VARIANT       *pvarVal;       /* VT_BYREF|VT_VARIANT  */
  322. [case(VT_BYREF)]
  323. #ifdef LATER
  324.       void     * byref;             /* Generic ByRef        */
  325. #else
  326.       long     * byref;             /* form midl likes */
  327. #endif
  328.     }
  329. #if(defined(NONAMELESSUNION))
  330.     u
  331. #endif
  332.      ;
  333. };
  334.  
  335. // End of variant definition
  336.  
  337. cpp_quote("#endif /* 0 */")
  338.  
  339. // #########################################################################
  340. //         wireVARIANT
  341. // #########################################################################
  342.  
  343.  
  344. typedef struct userVARIANT{
  345.     VARTYPE     vt;
  346.     WORD        wReserved1;
  347.     WORD        wReserved2;
  348.     WORD        wReserved3;
  349.     [switch_type(unsigned long), switch_is((unsigned long) (vt & 0x1fff))]
  350.     union
  351.     {
  352.     [case(VT_I4)]   // moved first so you can statically init most of the structure
  353.                         long          lVal;           /* VT_I4                */
  354.     [case(VT_UI1)]      unsigned char bVal;           /* VT_UI1               */
  355.     [case(VT_I2)]       short         iVal;           /* VT_I2                */
  356.     [case(VT_R4)]       float         fltVal;         /* VT_R4                */
  357.     [case(VT_R8)]       double        dblVal;         /* VT_R8                */
  358.     [case(VT_BOOL)]     VARIANT_BOOL  bool;           /* VT_BOOL              */
  359.     [case(VT_ERROR)]    SCODE         scode;          /* VT_ERROR             */
  360.     [case(VT_CY)]       CY            cyVal;          /* VT_CY                */
  361.     [case(VT_DATE)]     DATE          date;           /* VT_DATE              */
  362.     [case(VT_BSTR)]     wireBSTR      bstrVal;        /* VT_BSTR              */
  363.     [case(VT_UNKNOWN)]  IUnknown      *punkVal;       /* VT_UNKNOWN           */
  364.     [case(VT_DISPATCH)] IDispatch     *pdispVal;      /* VT_DISPATCH          */
  365.     [case(VT_ARRAY)]    wirePSAFEARRAY parray;        /* VT_ARRAY|*           */
  366.  
  367.     [case(VT_UI1|VT_BYREF)]
  368.                         unsigned char *pbVal;         /* VT_BYREF|VT_UI1      */
  369.     [case(VT_I2|VT_BYREF)]
  370.                         short         *piVal;         /* VT_BYREF|VT_I2       */
  371.     [case(VT_I4|VT_BYREF)]
  372.                         long          *plVal;         /* VT_BYREF|VT_I4       */
  373.     [case(VT_R4|VT_BYREF)]
  374.                         float         *pfltVal;       /* VT_BYREF|VT_R4       */
  375.     [case(VT_R8|VT_BYREF)]
  376.                         double        *pdblVal;       /* VT_BYREF|VT_R8       */
  377.     [case(VT_BOOL|VT_BYREF)]
  378.                         VARIANT_BOOL  *pbool;         /* VT_BYREF|VT_BOOL     */
  379.     [case(VT_ERROR|VT_BYREF)]
  380.                         SCODE         *pscode;        /* VT_BYREF|VT_ERROR    */
  381.     [case(VT_CY|VT_BYREF)]
  382.                         CY            *pcyVal;        /* VT_BYREF|VT_CY       */
  383.     [case(VT_DATE|VT_BYREF)]
  384.                         DATE          *pdate;         /* VT_BYREF|VT_DATE     */
  385.     [case(VT_BSTR|VT_BYREF)]
  386.                         wireBSTR      *pbstrVal;      /* VT_BYREF|VT_BSTR     */
  387.     [case(VT_UNKNOWN|VT_BYREF)]
  388.                         IUnknown      **ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */
  389.     [case(VT_DISPATCH|VT_BYREF)]
  390.                         IDispatch     **ppdispVal;    /* VT_BYREF|VT_DISPATCH */
  391.     [case(VT_ARRAY|VT_BYREF)]
  392.                         wirePSAFEARRAY *pparray;      /* VT_BYREF|VT_ARRAY|*  */
  393.     [case(VT_VARIANT|VT_BYREF)]
  394.                         wireVARIANT   *pvarVal;       /* VT_BYREF|VT_VARIANT  */
  395.     [case(VT_VARIANT)]
  396.                         wireVARIANT   varVal;         /* this is illegal  */
  397.     [case(VT_BYREF)]
  398.                         long     * byref;             /* form midl likes */
  399.     [case(VT_EMPTY)]    ;                             /* nothing         */       
  400.     [case(VT_NULL)]     ;                             /* nothing         */       
  401.     }
  402. #if(defined(NONAMELESSUNION))
  403.     u
  404. #endif
  405.      ;
  406. } userVARIANT;
  407.  
  408. cpp_quote("struct VARIANT{")
  409. cpp_quote("    VARTYPE vt;")
  410. cpp_quote("    WORD wReserved1;")
  411. cpp_quote("    WORD wReserved2;")
  412. cpp_quote("    WORD wReserved3;")
  413. cpp_quote("    union")
  414. cpp_quote("    {")
  415. cpp_quote("      long          lVal;           /* VT_I4                */")
  416. cpp_quote("      unsigned char bVal;           /* VT_UI1               */")
  417. cpp_quote("      short         iVal;           /* VT_I2                */")
  418. cpp_quote("      float         fltVal;         /* VT_R4                */")
  419. cpp_quote("      double        dblVal;         /* VT_R8                */")
  420. cpp_quote("      VARIANT_BOOL  bool;           /* VT_BOOL              */")
  421. cpp_quote("      SCODE         scode;          /* VT_ERROR             */")
  422. cpp_quote("      CY            cyVal;          /* VT_CY                */")
  423. cpp_quote("      DATE          date;           /* VT_DATE              */")
  424. cpp_quote("      BSTR          bstrVal;        /* VT_BSTR              */")
  425. cpp_quote("      IUnknown      *punkVal;       /* VT_UNKNOWN           */")
  426. cpp_quote("      IDispatch     *pdispVal;      /* VT_DISPATCH          */")
  427. cpp_quote("      SAFEARRAY     *parray;        /* VT_ARRAY|*           */")
  428. cpp_quote("      unsigned char *pbVal;         /* VT_BYREF|VT_UI1      */")
  429. cpp_quote("      short         *piVal;         /* VT_BYREF|VT_I2       */")
  430. cpp_quote("      long          *plVal;         /* VT_BYREF|VT_I4       */")
  431. cpp_quote("      float         *pfltVal;       /* VT_BYREF|VT_R4       */")
  432. cpp_quote("      double        *pdblVal;       /* VT_BYREF|VT_R8       */")
  433. cpp_quote("      VARIANT_BOOL  *pbool;         /* VT_BYREF|VT_BOOL     */")
  434. cpp_quote("      SCODE         *pscode;        /* VT_BYREF|VT_ERROR    */")
  435. cpp_quote("      CY            *pcyVal;        /* VT_BYREF|VT_CY       */")
  436. cpp_quote("      DATE          *pdate;         /* VT_BYREF|VT_DATE     */")
  437. cpp_quote("      BSTR          *pbstrVal;      /* VT_BYREF|VT_BSTR     */")
  438. cpp_quote("      IUnknown      **ppunkVal;     /* VT_BYREF|VT_UNKNOWN  */")
  439. cpp_quote("      IDispatch     **ppdispVal;    /* VT_BYREF|VT_DISPATCH */")
  440. cpp_quote("      SAFEARRAY     **pparray;      /* VT_BYREF|VT_ARRAY|*  */")
  441. cpp_quote("      VARIANT       *pvarVal;       /* VT_BYREF|VT_VARIANT  */")
  442. cpp_quote("      void     * byref;             /* Generic ByRef        */")
  443. cpp_quote("    }")
  444. cpp_quote("#if(defined(NONAMELESSUNION))")
  445. cpp_quote("    u")
  446. cpp_quote("#endif")
  447. cpp_quote("     ;")
  448. cpp_quote("};")
  449.  
  450. cpp_quote("#endif")
  451.  
  452.  
  453.  
  454.     cpp_quote("#ifndef _LPVARIANT_DEFINED")
  455.     cpp_quote("#define _LPVARIANT_DEFINED")
  456.     typedef struct VARIANT * LPVARIANT;
  457.     cpp_quote("#endif")
  458.  
  459.     cpp_quote("#ifndef _VARIANTARG_DEFINED")
  460.     cpp_quote("#define _VARIANTARG_DEFINED")
  461.     typedef struct VARIANT VARIANTARG;
  462.     cpp_quote("#endif")
  463.  
  464.     cpp_quote("#ifndef _LPVARIANTARG_DEFINED")
  465.     cpp_quote("#define _LPVARIANTARG_DEFINED")
  466.     typedef struct VARIANT * LPVARIANTARG;
  467.     cpp_quote("#endif")
  468.  
  469.  
  470.  
  471. //########################################################################
  472. //     End of VARIANT & SAFEARRAY
  473. //########################################################################
  474.  
  475.  
  476. //TypeInfo stuff.
  477.  
  478.     cpp_quote("#ifndef _DISPID_DEFINED")
  479.     cpp_quote("#define _DISPID_DEFINED")
  480.     typedef LONG DISPID;
  481.     cpp_quote("#endif")
  482.  
  483.  
  484.     cpp_quote("#ifndef _MEMBERID_DEFINED")
  485.     cpp_quote("#define _MEMBERID_DEFINED")
  486.     typedef DISPID MEMBERID;
  487.     cpp_quote("#endif")
  488.  
  489.     cpp_quote("#ifndef _HREFTYPE_DEFINED")
  490.     cpp_quote("#define _HREFTYPE_DEFINED")
  491.     typedef DWORD HREFTYPE;
  492.     cpp_quote("#endif")
  493.  
  494.  
  495.  
  496. typedef [v1_enum] enum  TYPEKIND
  497. {
  498.     TKIND_ENUM = 0,
  499.     TKIND_RECORD,
  500.     TKIND_MODULE,
  501.     TKIND_INTERFACE,
  502.     TKIND_DISPATCH,
  503.     TKIND_COCLASS,
  504.     TKIND_ALIAS,
  505.     TKIND_UNION,
  506.     TKIND_MAX                   /* end of enum marker */
  507. } TYPEKIND;
  508.  
  509.  
  510. cpp_quote("#ifndef _tagTYPEDESC_DEFINED")
  511. cpp_quote("#define _tagTYPEDESC_DEFINED")
  512. cpp_quote("#define _TYPEDESC_DEFINED")
  513.  
  514. cpp_quote("/* VT_PTR - lptdesc, the pointed at type */")
  515. cpp_quote("/* VT_CARRAY - lpadesc */")
  516. cpp_quote("/* VT_USERDEFINED - hreftype, used to get the UDT typeinfo */")
  517.  
  518. typedef struct  TYPEDESC {
  519.     [switch_type(short), switch_is((short)vt)] union
  520.     {
  521.       [case(VT_PTR)] struct  TYPEDESC * lptdesc;
  522.       [case(VT_CARRAY)] struct  ARRAYDESC * lpadesc;
  523.       [case(VT_USERDEFINED)] HREFTYPE hreftype;
  524.     }
  525. #if(defined(NONAMELESSUNION))
  526.     u
  527. #endif
  528.     ;
  529.     VARTYPE vt;
  530. } TYPEDESC;
  531. cpp_quote("#endif")
  532.  
  533.  
  534. cpp_quote("#ifndef _tagARRAYDESC_DEFINED")
  535. cpp_quote("#define _tagARRAYDESC_DEFINED")
  536. cpp_quote("#define _ARRAYDESC_DEFINED")
  537. cpp_quote("#if 0")
  538.     typedef struct ARRAYDESC {
  539.         TYPEDESC tdescElem;     /* element type */
  540.         USHORT cDims;       /* dimension count */
  541.         [size_is(cDims)] SAFEARRAYBOUND rgbounds[]; /* variable length array of bounds */
  542.     } ARRAYDESC;
  543. cpp_quote("#else")
  544. cpp_quote("typedef struct  ARRAYDESC {")
  545. cpp_quote("    TYPEDESC tdescElem;     /* element type */")
  546. cpp_quote("    USHORT cDims;       /* dimension count */")
  547. cpp_quote("    SAFEARRAYBOUND rgbounds[1]; /* variable length array of bounds */")
  548. cpp_quote("} ARRAYDESC;")
  549. cpp_quote("#endif")
  550. cpp_quote("#endif")
  551.  
  552.  
  553. cpp_quote("#ifndef _tagIDLDESC_DEFINED")
  554. cpp_quote("#define _tagIDLDESC_DEFINED")
  555. cpp_quote("#define _IDLDESC_DEFINED")
  556. cpp_quote("#define _LPIDLDESC_DEFINED")
  557. cpp_quote("#ifdef _WIN32")
  558. typedef struct FARSTRUCT  IDLDESC {
  559. #if defined(_WIN32) || defined(_MAC)
  560.     unsigned long dwReserved;
  561. #else
  562.     BSTR bstrIDLInfo;           /* reserved, but original name retained for
  563.                                    compatibilty */
  564. #endif
  565.     unsigned short wIDLFlags;   /* IN, OUT, etc */
  566. } IDLDESC, FAR* LPIDLDESC;
  567.  
  568. cpp_quote("#else")
  569. cpp_quote("typedef struct FARSTRUCT  IDLDESC {")
  570. cpp_quote("#if defined(_WIN32)")
  571. cpp_quote("    unsigned long dwReserved;")
  572. cpp_quote("#else")
  573. cpp_quote("    BSTR bstrIDLInfo;           /* reserved, but original name retained for")
  574. cpp_quote("                                   compatibilty */")
  575. cpp_quote("#endif")
  576. cpp_quote("    unsigned short wIDLFlags;   /* IN, OUT, etc */")
  577. cpp_quote("} IDLDESC, FAR* LPIDLDESC;")
  578. cpp_quote("#endif")
  579. cpp_quote("#endif")
  580.  
  581.  
  582. cpp_quote("#ifndef _tagELEMDESC_DEFINED")
  583. cpp_quote("#define _tagELEMDESC_DEFINED")
  584. cpp_quote("#define _ELEMDESC_DEFINED")
  585. cpp_quote("#define _LPELEMDESC_DEFINED")
  586. typedef struct  ELEMDESC {
  587.     TYPEDESC tdesc;     /* the type of the element */
  588.     IDLDESC idldesc;        /* info for remoting the element */
  589. } ELEMDESC, * LPELEMDESC;
  590. cpp_quote("#endif")
  591.  
  592.  
  593. cpp_quote("#ifndef _tagTYPEATTR_DEFINED")
  594. cpp_quote("#define _tagTYPEATTR_DEFINED")
  595. cpp_quote("#define _TYPEATTR_DEFINED")
  596. cpp_quote("#define _LPTYPEATTR_DEFINED")
  597. typedef struct  TYPEATTR {
  598.     GUID typeguid;          /* the GUID of the TypeInfo */
  599.     LCID typelcid;          /* locale of member names and doc strings */
  600.     long  dwReserved;
  601.     MEMBERID memidConstructor;  /* ID of constructor, MEMBERID_NIL if none */
  602.     MEMBERID memidDestructor;   /* ID of destructor, MEMBERID_NIL if none */
  603.     LPOLESTR lpstrSchema;
  604.     DWORD cbSizeInstance;    /* the size of an instance of this type */
  605.     TYPEKIND typekind;      /* the kind of type this typeinfo describes */
  606.     WORD cFuncs;        /* number of functions */
  607.     WORD cVars;         /* number of variables / data members */
  608.     WORD cImplTypes;        /* number of implemented interfaces */
  609.     WORD cbSizeVft;     /* the size of this types virtual func table */
  610.     WORD cbAlignment;       /* specifies the alignment requirements for
  611.                    an instance of this type,
  612.                      0 = align on 64k boundary
  613.                      1 = byte align
  614.                      2 = word align
  615.                      4 = dword align... */
  616.     WORD wTypeFlags;
  617.     WORD wMajorVerNum;      /* major version number */
  618.     WORD wMinorVerNum;      /* minor version number */
  619.     TYPEDESC tdescAlias;    /* if typekind == TKIND_ALIAS this field
  620.                    specifies the type for which this type
  621.                    is an alias */
  622.     IDLDESC idldescType;        /* IDL attributes of the described type */
  623. } TYPEATTR, * LPTYPEATTR;
  624. cpp_quote("#endif")
  625.  
  626.  
  627. typedef struct _userDISPPARAMS{
  628.     [size_is(cArgs)]      wireVARIANT * rgvarg;
  629.     [size_is(cNamedArgs)] DISPID      * rgdispidNamedArgs;
  630.     UINT cArgs;
  631.     UINT cNamedArgs;
  632. } userDISPPARAMS;
  633.  
  634. typedef [unique]   userDISPPARAMS * wireDISPPARAMS;
  635.  
  636. typedef [wire_marshal( wireDISPPARAMS )] 
  637. struct  DISPPARAMS{
  638.     [size_is(cArgs)] VARIANTARG * rgvarg;
  639.     [size_is(cNamedArgs)] DISPID * rgdispidNamedArgs;
  640.     UINT cArgs;
  641.     UINT cNamedArgs;
  642. } DISPPARAMS;
  643.  
  644.  
  645. typedef struct  RemEXCEPINFO {
  646.     WORD wCode;             /* An error code describing the error. */
  647.     WORD wReserved;
  648.     DWORD dwHelpContext;    /* help context of topic within the help file. */
  649.     DWORD scode;
  650.     DWORD cSource;
  651.     DWORD cDescription;
  652.     DWORD cHelpFile;
  653.     [size_is(cSource + cDescription + cHelpFile)] OLECHAR strings[]; //Contains bstrSource, bstrDescription, bstrHelpFile.
  654. }  RemEXCEPINFO;
  655.  
  656.  
  657. typedef struct _userEXCEPINFO {
  658.     WORD wCode;             /* An error code describing the error. */
  659.     WORD       wReserved;
  660.     BSTR       bstrSource;        /* A source of the exception */
  661.     BSTR       bstrDescription;   /* A description of the error */
  662.     BSTR       bstrHelpFile;   /* Fully qualified drive, path, and file name */
  663.     DWORD      dwHelpContext;  /* help context of topic within the help file */
  664.     unsigned long *  pvReserved;
  665.     unsigned long *  pfnDeferredFillIn;
  666.     SCODE      scode;
  667. }  userEXCEPINFO;
  668.  
  669. typedef [unique] userEXCEPINFO * wireEXCEPINFO;
  670.  
  671. typedef [wire_marshal( wireEXCEPINFO )]
  672. struct  EXCEPINFO {
  673.     WORD        wCode;
  674.     WORD        wReserved;
  675.     BSTR        bstrSource;
  676.     BSTR        bstrDescription;
  677.     BSTR        bstrHelpFile;
  678.     DWORD       dwHelpContext;
  679.     void      * pvReserved;
  680.     HRESULT (__stdcall * pfnDeferredFillIn)(struct  EXCEPINFO *);
  681.     SCODE       scode;
  682. }  EXCEPINFO;
  683. typedef EXCEPINFO * LPEXCEPINFO;
  684.  
  685.  
  686. typedef [v1_enum] enum  CALLCONV {
  687.       CC_CDECL = 1
  688.     , CC_MSCPASCAL
  689.     , CC_PASCAL = CC_MSCPASCAL
  690.     , CC_MACPASCAL
  691.     , CC_STDCALL
  692.     , CC_RESERVED
  693.     , CC_SYSCALL
  694.     , CC_MPWCDECL
  695.     , CC_MPWPASCAL
  696.     , CC_MAX                    /* end of enum marker */
  697. #ifdef _MAC
  698.     , CC_FORCELONG = 2147483647
  699. #endif
  700. } CALLCONV;
  701.  
  702.  
  703. typedef [v1_enum] enum  FUNCKIND {
  704.     FUNC_VIRTUAL,
  705.     FUNC_PUREVIRTUAL,
  706.     FUNC_NONVIRTUAL,
  707.     FUNC_STATIC,
  708.     FUNC_DISPATCH
  709. } FUNCKIND;
  710.  
  711.  
  712. typedef [v1_enum] enum  INVOKEKIND {
  713.     INVOKE_FUNC = 1,
  714.     INVOKE_PROPERTYGET = 2,
  715.     INVOKE_PROPERTYPUT = 4,
  716.     INVOKE_PROPERTYPUTREF = 8
  717. } INVOKEKIND;
  718.  
  719. typedef struct  FUNCDESC {
  720.     MEMBERID memid;
  721.     [size_is(cScodes)] SCODE * lprgscode;
  722.     [size_is(cParams)] ELEMDESC * lprgelemdescParam;  /* array of parameter types */
  723.     FUNCKIND funckind;
  724.     INVOKEKIND invkind;
  725.     CALLCONV callconv;
  726.     SHORT cParams;
  727.     SHORT cParamsOpt;
  728.     SHORT oVft;
  729.     SHORT cScodes;
  730.     ELEMDESC elemdescFunc;
  731.     WORD wFuncFlags;
  732. } FUNCDESC, * LPFUNCDESC;
  733.  
  734. typedef [v1_enum] enum  VARKIND {
  735.     VAR_PERINSTANCE,
  736.     VAR_STATIC,
  737.     VAR_CONST,
  738.     VAR_DISPATCH
  739. } VARKIND;
  740.  
  741.  
  742. /* IMPLTYPE Flags */
  743. const USHORT IMPLTYPEFLAG_FDEFAULT = 0x1;
  744. const USHORT IMPLTYPEFLAG_FSOURCE  = 0x2;
  745. const USHORT IMPLTYPEFLAG_FRESTRICTED  = 0x4;
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752. typedef struct  VARDESC {
  753.     MEMBERID memid;
  754.     LPOLESTR lpstrSchema;
  755.     [switch_type(unsigned short), switch_is((unsigned short)varkind)]
  756.     union
  757.     {
  758.       [case(VAR_PERINSTANCE)] ULONG oInst;      /* VAR_PERINSTANCE - the offset of this
  759.                    variable within the instance */
  760.       [case(VAR_CONST)] VARIANT * lpvarValue;  /* VAR_CONST - the value of the constant */
  761.     };
  762.     ELEMDESC elemdescVar;
  763.     WORD wVarFlags;
  764.     VARKIND varkind;
  765. } VARDESC, * LPVARDESC;
  766.  
  767.  
  768. cpp_quote("#ifndef _tagTYPEFLAGS_DEFINED")
  769. cpp_quote("#define _tagTYPEFLAGS_DEFINED")
  770. cpp_quote("#define _TYPEFLAGS_DEFINED")
  771. typedef enum  TYPEFLAGS {
  772.       TYPEFLAG_FAPPOBJECT = 0x01
  773.     , TYPEFLAG_FCANCREATE = 0x02
  774.     , TYPEFLAG_FLICENSED = 0x04
  775.     , TYPEFLAG_FPREDECLID = 0x08
  776.     , TYPEFLAG_FHIDDEN = 0x10
  777.     , TYPEFLAG_FCONTROL = 0x20
  778.     , TYPEFLAG_FDUAL = 0x40
  779.     , TYPEFLAG_FNONEXTENSIBLE = 0x80
  780.     , TYPEFLAG_FOLEAUTOMATION = 0x100
  781.     , TYPEFLAG_FRESTRICTED = 0x200
  782. #ifdef _MAC
  783.     , TYPEFLAG_FORCELONG  = 2147483647
  784. #endif
  785. } TYPEFLAGS;
  786. cpp_quote("#endif")
  787.  
  788.  
  789.  
  790. cpp_quote("#ifndef _tagFUNCFLAGS_DEFINED")
  791. cpp_quote("#define _tagFUNCFLAGS_DEFINED")
  792. cpp_quote("#define _FUNCFLAGS_DEFINED")
  793. typedef enum  FUNCFLAGS {
  794.       FUNCFLAG_FRESTRICTED= 1
  795.       , FUNCFLAG_FSOURCE= 0x2
  796.       , FUNCFLAG_FBINDABLE= 0x4
  797.       , FUNCFLAG_FREQUESTEDIT= 0x8
  798.       , FUNCFLAG_FDISPLAYBIND= 0x10
  799.       , FUNCFLAG_FDEFAULTBIND= 0x20
  800.       , FUNCFLAG_FHIDDEN= 0x40
  801.       , FUNCFLAG_FUSESGETLASTERROR= 0x80
  802. #ifdef _MAC
  803.     , FUNCFLAG_FORCELONG  = 2147483647
  804. #endif
  805. } FUNCFLAGS;
  806. cpp_quote("#endif")
  807.  
  808.  
  809. cpp_quote("#ifndef _tagVARFLAGS_DEFINED")
  810. cpp_quote("#define _tagVARFLAGS_DEFINED")
  811. cpp_quote("#define _VARFLAGS_DEFINED")
  812. typedef enum  VARFLAGS {
  813.       VARFLAG_FREADONLY = 1
  814.       , VARFLAG_FSOURCE= 0x2
  815.       , VARFLAG_FBINDABLE= 0x4
  816.       , VARFLAG_FREQUESTEDIT= 0x8
  817.       , VARFLAG_FDISPLAYBIND= 0x10
  818.       , VARFLAG_FDEFAULTBIND= 0x20
  819.       , VARFLAG_FHIDDEN = 0x40
  820. #ifdef _MAC
  821.     , VARFLAG_FORCELONG   = 2147483647
  822. #endif
  823. } VARFLAGS;
  824. cpp_quote("#endif")
  825. }
  826. [
  827.     object,
  828.     uuid(00020405-0000-0000-C000-000000000046),
  829.     pointer_default(unique),
  830.     local  /* marshalling supplied by oleaut32.dll */
  831. ]
  832.  
  833. interface ICreateTypeInfo: IUnknown
  834. {
  835.  
  836.     typedef [unique] ICreateTypeInfo *LPCREATETYPEINFO;
  837.  
  838.  
  839.  
  840.     HRESULT SetGuid(
  841.                      [in] REFGUID guid
  842.                    );
  843.  
  844.     HRESULT SetTypeFlags(
  845.                         [in]   UINT uTypeFlags
  846.                         );
  847.  
  848.     HRESULT SetDocString(
  849.                         [in] LPOLESTR lpstrDoc
  850.                         );
  851.  
  852.     HRESULT SetHelpContext(
  853.                         [in] DWORD dwHelpContext
  854.                           );
  855.  
  856.     HRESULT SetVersion(
  857.                         [in] WORD wMajorVerNum,
  858.                         [in] WORD wMinorVerNum
  859.                       );
  860.  
  861.     HRESULT AddRefTypeInfo(
  862.  
  863.                         [in] ITypeInfo * ptinfo,
  864.                         [in] HREFTYPE * phreftype
  865.                           );
  866.  
  867.     HRESULT AddFuncDesc(
  868.                         [in] UINT index,
  869.                         [in] FUNCDESC * pfuncdesc
  870.                        );
  871.  
  872.     HRESULT AddImplType(
  873.                         [in] UINT index,
  874.                         [in] HREFTYPE hreftype
  875.                        );
  876.  
  877.     HRESULT SetImplTypeFlags(
  878.                         [in] UINT index,
  879.                         [in] INT impltypeflags
  880.                             );
  881.  
  882.     HRESULT SetAlignment(
  883.                         [in] WORD cbAlignment
  884.                         );
  885.  
  886.     HRESULT SetSchema(
  887.                         [in] LPOLESTR lpstrSchema
  888.                      );
  889.  
  890.     HRESULT AddVarDesc(
  891.                         [in]  UINT index,
  892.                         [in]  VARDESC * pvardesc
  893.                       );
  894.  
  895.     HRESULT SetFuncAndParamNames(
  896.                                  [in]  UINT index,
  897.             [in, size_is((long) cNames)]
  898.                                  [in]  LPOLESTR * rgszNames,
  899.                                  [in]  UINT cNames
  900.                                );
  901.  
  902.     HRESULT SetVarName(
  903.                         [in] UINT index,
  904.                         [in] LPOLESTR szName
  905.                       );
  906.  
  907.     HRESULT SetTypeDescAlias(
  908.                               [in]  TYPEDESC * ptdescAlias
  909.                             );
  910.  
  911.     HRESULT DefineFuncAsDllEntry(
  912.                                  [in] UINT index,
  913.                                  [in] LPOLESTR szDllName,
  914.                                  [in] LPOLESTR szProcName
  915.          );
  916.  
  917.     HRESULT SetFuncDocString(
  918.                               [in] UINT index,
  919.                               [in] LPOLESTR szDocString
  920.          );
  921.  
  922.     HRESULT SetVarDocString(
  923.                               [in] UINT index,
  924.                               [in] LPOLESTR szDocString
  925.                            );
  926.  
  927.     HRESULT SetFuncHelpContext(
  928.                               [in] UINT index,
  929.                               [in] DWORD dwHelpContext
  930.          );
  931.  
  932.     HRESULT SetVarHelpContext(
  933.                               [in] UINT index,
  934.                               [in] DWORD dwHelpContext
  935.          );
  936.  
  937.     HRESULT SetMops(
  938.                               [in] UINT index,
  939.                               [in] BSTR bstrMops
  940.          );
  941.  
  942.     HRESULT SetTypeIdldesc(
  943.                               [in] IDLDESC * pidldesc
  944.          );
  945.  
  946.     HRESULT LayOut(
  947.                      void
  948.                   );
  949.  
  950. }
  951.  
  952.  
  953.  
  954.  
  955. [
  956.     object,
  957.     uuid(00020406-0000-0000-C000-000000000046),
  958.     pointer_default(unique),
  959.     local  /* marshalling supplied by oleaut32.dll */
  960. ]
  961.  
  962. interface ICreateTypeLib : IUnknown
  963. {
  964.  
  965.     typedef [unique] ICreateTypeLib *LPCREATETYPELIB;
  966.  
  967.  
  968.     HRESULT CreateTypeInfo(
  969.                             [in]  LPOLESTR szName,
  970.                             [in]  TYPEKIND tkind,
  971.                             [out] ICreateTypeInfo **lplpictinfo
  972.                            );
  973.  
  974.     HRESULT SetName( LPOLESTR szName);
  975.  
  976.     HRESULT SetVersion
  977.     (
  978.         [in] WORD wMajorVerNum,
  979.         [in] WORD wMinorVerNum
  980.     );
  981.  
  982.  
  983.  
  984.  
  985.     HRESULT SetGuid
  986.     (
  987.         [in] REFGUID guid
  988.     );
  989.  
  990.     HRESULT SetDocString
  991.     (
  992.         [in] LPOLESTR szDoc
  993.     );
  994.  
  995.  
  996.     HRESULT SetHelpFileName
  997.     (
  998.         [in] LPOLESTR szHelpFileName
  999.     );
  1000.  
  1001.     HRESULT SetHelpContext
  1002.     (
  1003.         [in] DWORD dwHelpContext
  1004.     );
  1005.  
  1006.     HRESULT SetLcid
  1007.     (
  1008.         [in] LCID lcid
  1009.     );
  1010.  
  1011.     HRESULT SetLibFlags
  1012.     (
  1013.         [in] UINT uLibFlags
  1014.     );
  1015.  
  1016.  
  1017.     HRESULT SaveAllChanges
  1018.     (
  1019.         void
  1020.     );
  1021.  
  1022. }
  1023.  
  1024. [
  1025.     object,
  1026.     uuid(00020400-0000-0000-C000-000000000046),
  1027.     pointer_default(unique),
  1028.     local  /* marshalling supplied by oleaut32.dll */
  1029. ]
  1030.  
  1031. interface IDispatch : IUnknown
  1032. {
  1033.  
  1034.     typedef [unique] IDispatch *LPDISPATCH;
  1035.  
  1036.     HRESULT GetTypeInfoCount
  1037.     (
  1038.         [out] UINT *pctinfo
  1039.     );
  1040.  
  1041.     HRESULT GetTypeInfo
  1042.     (
  1043.         [in] UINT itinfo,
  1044.         [in] LCID lcid,
  1045.         [out] ITypeInfo ** pptinfo
  1046.     );
  1047.  
  1048.     HRESULT GetIDsOfNames
  1049.     (
  1050.         [in] REFIID riid,
  1051.         [in, size_is(cNames)] LPOLESTR *rgszNames,
  1052.         [in] UINT cNames,
  1053.         [in] LCID lcid,
  1054.         [in, out, size_is(cNames)] DISPID *rgdispid
  1055.     );
  1056.  
  1057.     HRESULT Invoke
  1058.     (
  1059.         [in] DISPID dispidMember,
  1060.         [in] REFIID riid,
  1061.         [in] LCID lcid,
  1062.         [in] WORD wFlags,
  1063.         [in, unique] DISPPARAMS *pdispparams,
  1064.         [in, out, unique] VARIANT *pvarResult,
  1065.         [out] EXCEPINFO *pexcepinfo,
  1066.         [out] UINT *puArgErr
  1067.     );
  1068.  
  1069. cpp_quote("/* DISPID reserved to indicate an \"unknown\" name */")
  1070. cpp_quote("/* only reserved for data members (properties); reused as a method dispid below */")
  1071.    const DISPID DISPID_UNKNOWN       = -1;
  1072.  
  1073. cpp_quote("/* DISPID reserved for the \"value\" property */")
  1074.    const DISPID DISPID_VALUE         = 0;
  1075.  
  1076. cpp_quote("/* The following DISPID is reserved to indicate the param")
  1077. cpp_quote(" * that is the right-hand-side (or \"put\" value) of a PropertyPut")
  1078. cpp_quote(" */")
  1079. const DISPID DISPID_PROPERTYPUT = -3;
  1080.  
  1081. cpp_quote("/* DISPID reserved for the standard \"NewEnum\" method */")
  1082. const DISPID DISPID_NEWENUM  = -4;
  1083.  
  1084. cpp_quote("/* DISPID reserved for the standard \"Evaluate\" method */")
  1085. const DISPID DISPID_EVALUATE = -5;
  1086.  
  1087. const DISPID DISPID_CONSTRUCTOR = -6;
  1088.  
  1089. const DISPID DISPID_DESTRUCTOR = -7;
  1090.  
  1091. const DISPID DISPID_COLLECT = -8;
  1092.  
  1093. cpp_quote("/* The range -500 through -999 is reserved for Controls */")
  1094. cpp_quote("/* The range 0x80010000 through 0x8001FFFF is reserved for Controls */")
  1095. cpp_quote("/* The remainder of the negative DISPIDs are reserved for future use */")
  1096.  
  1097. }
  1098.  
  1099. #if 0 
  1100. [
  1101.     object,
  1102.     local,
  1103.     uuid(00020404-0000-0000-C000-000000000046),
  1104.     pointer_default(unique)
  1105. ]
  1106.  
  1107. interface IEnumVARIANT : IUnknown
  1108. {
  1109.  
  1110.     typedef [unique] IEnumVARIANT* LPENUMVARIANT;
  1111.  
  1112.  
  1113.     HRESULT Next([in] unsigned long celt,
  1114.                  [out] VARIANT *rgvar,
  1115.                  [out] unsigned long *pceltFetched);
  1116.  
  1117.     HRESULT Skip([in] unsigned long celt);
  1118.  
  1119.     HRESULT Reset();
  1120.  
  1121.     HRESULT Clone([out] IEnumVARIANT** ppenum);
  1122.  
  1123. }
  1124. #endif
  1125.  
  1126. [
  1127.     object,
  1128.     uuid(00020403-0000-0000-C000-000000000046),
  1129.     pointer_default(unique),
  1130.     local  /* marshalling supplied by oleaut32.dll */
  1131. ]
  1132.  
  1133. interface ITypeComp : IUnknown
  1134. {
  1135.  
  1136.     typedef [unique] ITypeComp *LPTYPECOMP;
  1137.  
  1138.     typedef [v1_enum] enum  DESCKIND
  1139.     {
  1140.         DESCKIND_NONE = 0,
  1141.         DESCKIND_FUNCDESC,
  1142.         DESCKIND_VARDESC,
  1143.         DESCKIND_TYPECOMP,
  1144.         DESCKIND_IMPLICITAPPOBJ,
  1145.         DESCKIND_MAX
  1146.     } DESCKIND;
  1147.  
  1148.     [switch_type(long)] union  BINDPTR
  1149.     {
  1150.     [case(DESCKIND_FUNCDESC)]
  1151.         FUNCDESC *lpfuncdesc;
  1152.  
  1153.     [case(DESCKIND_VARDESC)]
  1154.         VARDESC *lpvardesc;
  1155.  
  1156.     [case(DESCKIND_TYPECOMP)]
  1157.         [unique] ITypeComp *lptcomp;
  1158.  
  1159.     [default]
  1160.         ;
  1161.     };
  1162.  
  1163.     typedef union  BINDPTR BINDPTR;
  1164.     typedef BINDPTR *LPBINDPTR;
  1165.  
  1166.     HRESULT Bind
  1167.     (
  1168.         [in] LPOLESTR szName,
  1169.         [in] ULONG lHashVal,
  1170.         [in] WORD fFlags,
  1171.         [out] ITypeInfo **pptinfo,
  1172.         [out] DESCKIND *pdesckind,
  1173.         [out, switch_is((long) *pdesckind)] BINDPTR *pbindptr
  1174.     );
  1175.  
  1176.     HRESULT BindType
  1177.     (
  1178.         [in] LPOLESTR szName,
  1179.         [in] ULONG lHashVal,
  1180.         [out] ITypeInfo **pptinfo,
  1181.         [out] ITypeComp **pptcomp
  1182.     );
  1183. }
  1184.  
  1185. [
  1186.     object,
  1187.     uuid(00020401-0000-0000-C000-000000000046),
  1188.     pointer_default(unique),
  1189.     local  /* marshalling supplied by oleaut32.dll */
  1190. ]
  1191.  
  1192. interface ITypeInfo : IUnknown
  1193. {
  1194.  
  1195.     typedef [unique] ITypeInfo *LPTYPEINFO;
  1196.  
  1197. /*---------------------------------------------------------------------*/
  1198. /*                            ITypeInfo                                */
  1199. /*---------------------------------------------------------------------*/
  1200.  
  1201.     HRESULT GetTypeAttr
  1202.     (
  1203.         [out] TYPEATTR **pptypeattr
  1204.     );
  1205.  
  1206.     HRESULT GetTypeComp
  1207.     (
  1208.         [out] ITypeComp **pptcomp
  1209.     );
  1210.  
  1211.     HRESULT GetFuncDesc
  1212.     (
  1213.         [in] UINT index,
  1214.         [out] FUNCDESC **pppfuncdesc
  1215.     );
  1216.  
  1217.     HRESULT GetVarDesc
  1218.     (
  1219.         [in] UINT index,
  1220.         [out] VARDESC **ppvardesc
  1221.     );
  1222.  
  1223.     HRESULT GetNames
  1224.     (
  1225.         [in] MEMBERID memid,
  1226.         [out, size_is(cMaxNames), length_is(*pcNames)] BSTR *rgbstrNames,
  1227.         [in] UINT cMaxNames,
  1228.         [out] UINT *pcNames
  1229.     );
  1230.  
  1231.  
  1232.     HRESULT GetRefTypeOfImplType
  1233.     (
  1234.         [in] UINT index,
  1235.         [out] HREFTYPE *hpreftype
  1236.     );
  1237.  
  1238.  
  1239.     HRESULT GetImplTypeFlags
  1240.     (
  1241.         [in] UINT index,
  1242.         [out] INT * pimpltypeflags
  1243.     );
  1244.  
  1245.  
  1246.  
  1247.     HRESULT GetIDsOfNames
  1248.     (
  1249.         [in, size_is(cNames)] OLECHAR **rglpszNames,
  1250.         [in] UINT cNames,
  1251.         [out, size_is(cNames)] MEMBERID *rgmemid
  1252.     );
  1253.  
  1254.     HRESULT Invoke
  1255.     (
  1256.     [in, unique] void *pvInstance,
  1257.         [in] MEMBERID memid,
  1258.         [in] WORD wFlags,
  1259.         [in] DISPPARAMS *pdispparams,
  1260.         [out] VARIANT *pvarResult,
  1261.         [out] EXCEPINFO *pexcepinfo,
  1262.         [out] UINT *puArgErr
  1263.     );
  1264.  
  1265.     HRESULT GetDocumentation
  1266.     (
  1267.         [in] MEMBERID memid,
  1268.         [out] BSTR *pbstrName,
  1269.         [out] BSTR *pbstrDocString,
  1270.         [out] DWORD *pdwHelpContext,
  1271.         [out] BSTR * pbstrHelpFile
  1272.     );
  1273.  
  1274.     HRESULT GetDllEntry
  1275.     (
  1276.         [in] MEMBERID memid,
  1277.         [in] INVOKEKIND invkind,
  1278.         [out] BSTR *pbstrDllName,
  1279.         [out] BSTR *pbstrName,
  1280.         [out] WORD *pwOrdinal
  1281.     );
  1282.  
  1283.     HRESULT GetRefTypeInfo
  1284.     (
  1285.         [in] HREFTYPE hreftype,
  1286.         [out] ITypeInfo ** pptinfo
  1287.     );
  1288.  
  1289.     HRESULT __stdcall AddressOfMember
  1290.     (
  1291.         [in] MEMBERID memid,
  1292.         [in] INVOKEKIND invkind,
  1293.         [out] void **ppv
  1294.     );
  1295.  
  1296.     HRESULT CreateInstance
  1297.     (
  1298.         [in] IUnknown * puncOuter,
  1299.         [in] REFIID riid,
  1300.         [out] void **ppvObj
  1301.     );
  1302.  
  1303.     HRESULT GetMops
  1304.     (
  1305.         [in] MEMBERID memid,
  1306.         [out] BSTR *pbstrMops
  1307.     );
  1308.  
  1309.     HRESULT GetContainingTypeLib
  1310.     (
  1311.         [out] ITypeLib **pptlib,
  1312.         [out] UINT *pindex
  1313.     );
  1314.  
  1315.     void ReleaseTypeAttr
  1316.     (
  1317.         [in] TYPEATTR *ptypeattr
  1318.     );
  1319.  
  1320.     void ReleaseFuncDesc
  1321.     (
  1322.         [in] FUNCDESC *pfuncdesc
  1323.     );
  1324.  
  1325.     void ReleaseVarDesc
  1326.     (
  1327.         [in] VARDESC *pvardesc
  1328.     );
  1329. }
  1330.  
  1331. [
  1332.     object,
  1333.     uuid(00020402-0000-0000-C000-000000000046),
  1334.     pointer_default(unique),
  1335.     local  /* marshalling supplied by oleaut32.dll */
  1336.  
  1337. ]
  1338.  
  1339. interface ITypeLib : IUnknown
  1340. {
  1341.  
  1342.     typedef [v1_enum] enum  SYSKIND
  1343.     {
  1344.         SYS_WIN16 = 0,
  1345.         SYS_WIN32,
  1346.         SYS_MAC
  1347.     } SYSKIND;
  1348.  
  1349.  
  1350.     typedef [v1_enum] enum  LIBFLAGS
  1351.     {
  1352.       LIBFLAG_FRESTRICTED = 0x01
  1353.       , LIBFLAG_FCONTROL = 0x02
  1354.       , LIBFLAG_FHIDDEN = 0x04
  1355.     } LIBFLAGS;
  1356.  
  1357.     typedef [unique] ITypeLib *LPTYPELIB;
  1358.  
  1359.     typedef struct  TLIBATTR
  1360.     {
  1361.         GUID libguid;
  1362.         LCID liblcid;
  1363.         SYSKIND syskind;
  1364.         WORD wMajorVerNum;
  1365.         WORD wMinorVerNum;
  1366.         WORD wLibFlags;
  1367.     } TLIBATTR;
  1368.  
  1369.     typedef TLIBATTR *LPTLIBATTR;
  1370.  
  1371.     UINT GetTypeInfoCount
  1372.     (
  1373.         void
  1374.     );
  1375.  
  1376.     HRESULT GetTypeInfo
  1377.     (
  1378.         [in] UINT index,
  1379.         [out] ITypeInfo **ppitinfo
  1380.     );
  1381.  
  1382.     HRESULT GetTypeInfoType
  1383.     (
  1384.         [in] UINT index,
  1385.         [out] TYPEKIND * ptkind
  1386.     );
  1387.  
  1388.     HRESULT GetTypeInfoOfGuid
  1389.     (
  1390.         [in] REFGUID guid,
  1391.         [out] ITypeInfo **pptinfo
  1392.     );
  1393.  
  1394.     HRESULT GetLibAttr
  1395.     (
  1396.         [out] TLIBATTR **pptlibattr
  1397.     );
  1398.  
  1399.     HRESULT GetTypeComp
  1400.     (
  1401.         [out] ITypeComp **pptcomp
  1402.     );
  1403.  
  1404.     HRESULT GetDocumentation
  1405.     (
  1406.         [in] INT index,
  1407.         [out] BSTR *pbstrName,
  1408.         [out] BSTR *pbstrDocString,
  1409.         [out] DWORD *pdwHelpContext,
  1410.         [out] BSTR *pbstrHelpFile
  1411.     );
  1412.  
  1413.     HRESULT IsName
  1414.     (
  1415.         [in] LPOLESTR szNameBuf,
  1416.         [in] ULONG lHashVal,
  1417.         [out] BOOL *pfName
  1418.     );
  1419.  
  1420.     HRESULT FindName
  1421.     (
  1422.         [in] LPOLESTR szNameBuf,
  1423.         [in] ULONG lHashVal,
  1424.         [out, size_is(*pcFound), length_is(*pcFound)] ITypeInfo ** rgptinfo,
  1425.         [out, size_is(*pcFound), length_is(*pcFound)] MEMBERID * rgmemid,
  1426.         [in, out] USHORT *pcFound
  1427.     );
  1428.  
  1429.     void ReleaseTLibAttr
  1430.     (
  1431.         [in] TLIBATTR *ptlibattr
  1432.     );
  1433.  
  1434. }
  1435.  
  1436. [
  1437.     object,
  1438.     uuid(1CF2B120-547D-101B-8E65-08002B2BD119),
  1439.     pointer_default(unique),
  1440.     local  /* marshalling supplied by oleaut32.dll */
  1441. ]
  1442.  
  1443. interface IErrorInfo: IUnknown
  1444. {
  1445.  
  1446.     typedef [unique] IErrorInfo *LPERRORINFO;
  1447.  
  1448.     HRESULT GetGUID(
  1449.                      [out] GUID FAR* pguid
  1450.                    );
  1451.  
  1452.     HRESULT GetSource(
  1453.                      [out] BSTR FAR* pbstrSource
  1454.                    );
  1455.  
  1456.     HRESULT GetDescription(
  1457.                      [out] BSTR FAR* pbstrDescription
  1458.                    );
  1459.  
  1460.     HRESULT GetHelpFile(
  1461.                      [out] BSTR FAR* pbstrHelpFile
  1462.                    );
  1463.  
  1464.     HRESULT GetHelpContext(
  1465.                      [out] DWORD FAR* pdwHelpContext
  1466.                    );
  1467.  
  1468. }
  1469.  
  1470. [
  1471.     object,
  1472.     uuid(22F03340-547D-101B-8E65-08002B2BD119),
  1473.     pointer_default(unique),
  1474.     local  /* marshalling supplied by oleaut32.dll */
  1475. ]
  1476.  
  1477. interface ICreateErrorInfo: IUnknown
  1478. {
  1479.  
  1480.     typedef [unique] ICreateErrorInfo *LPCREATEERRORINFO;
  1481.  
  1482.     HRESULT SetGUID(
  1483.                      [in] REFGUID rguid
  1484.                    );
  1485.  
  1486.     HRESULT SetSource(
  1487.                      [in] LPOLESTR szSource
  1488.                    );
  1489.  
  1490.     HRESULT SetDescription(
  1491.                      [in] LPOLESTR szDescription
  1492.                    );
  1493.  
  1494.     HRESULT SetHelpFile(
  1495.                      [in] LPOLESTR szHelpFile
  1496.                    );
  1497.  
  1498.     HRESULT SetHelpContext(
  1499.                      [in] DWORD dwHelpContext
  1500.                    );
  1501.  
  1502. }
  1503.  
  1504. [
  1505.     object,
  1506.     uuid(DF0B3D60-548F-101B-8E65-08002B2BD119),
  1507.     pointer_default(unique),
  1508.     local  /* marshalling supplied by oleaut32.dll */
  1509. ]
  1510.  
  1511. interface ISupportErrorInfo: IUnknown
  1512. {
  1513.  
  1514.     typedef [unique] ISupportErrorInfo *LPSUPPORTERRORINFO;
  1515.  
  1516.     HRESULT InterfaceSupportsErrorInfo(
  1517.                      [in] REFIID riid
  1518.                    );
  1519.  
  1520. }
  1521.